package ux51field 

import (
	"gitee.com/yanwc/ebike-vcom-device/internal/field"
	"gitee.com/yanwc/net/utils"
)

// field-35 u2 告警位
type (
	AlarmBit16    field.U2
	AlarmBit16Raw field.U2Raw
)

func (a AlarmBit16) Raw() (out AlarmBit16Raw) {
	copy(out[:], utils.NumberToBytesWithBigEndian(a))
	return
}

func (a AlarmBit16Raw) Type() AlarmBit16 {
	return utils.BytesToNumber[AlarmBit16](a[:])
}

func (a AlarmBit16Raw) Slice() []byte {
	return a[:]
}

func (a AlarmBit16) Alarm(v AlarmBit16) bool {
	return a&v == v
}

const (
	Sb16_15_OutFenceAlarm                    AlarmBit16 = 0b1000_0000_0000_0000 // Bit15：车辆移出围栏告警 1：移出围栏，0：保留
	Sb16_14_BackseatOpenedAlarm              AlarmBit16 = 0b0100_0000_0000_0000 // Bit14：后座锁打开告警 1：后座锁打开，0：保留
	Sb16_13_BackseatLockAlarm                AlarmBit16 = 0b0010_0000_0000_0000 // Bit13：后座锁关闭告警 1：后座锁关闭，0：保留
	Sb16_12_MovingAlarm                      AlarmBit16 = 0b0001_0000_0000_0000 // Bit12：移动告警 1：移动告警，0：保留
	Sb16_11_AccDisconnectedAlarm             AlarmBit16 = 0b0000_1000_0000_0000 // Bit11：ACC断开 1：ACC断开，0：保留
	Sb16_10_AccConnectedAlarm                AlarmBit16 = 0b0000_0100_0000_0000 // Bit10：ACC接通 1：ACC接通，0：保留
	Sb16_09_BatteryConnected                 AlarmBit16 = 0b0000_0010_0000_0000 // Bit9: 外部电池接入: 1:外部电池接入，0:保留
	Sb16_08_HelmetLockTimeoutAlarm           AlarmBit16 = 0b0000_0001_0000_0000 // Bit8: 头盔锁操作超时 1: 头盔锁操作超时告警， 0:保留
	Sb16_07_DeviceQuantityOfElectricityAlarm AlarmBit16 = 0b0000_0000_1000_0000 // Bit7: 终端电量告警 1:终端电量告警， 0:保留
	Sb16_06_HelmetInSlotAlarm                AlarmBit16 = 0b0000_0000_0100_0000 // Bit6: 头盔在位 1：头盔在位告警，0：保留
	Sb16_05_HelmetOutSlotAlarm               AlarmBit16 = 0b0000_0000_0010_0000 // Bit5: 头盔离位 1：头盔离位告警，0：保留
	Sb16_04_AutoLockAlarm                    AlarmBit16 = 0b0000_0000_0001_0000 // Bit4:自动落锁(ACC断开): 1：自动落锁；0：保留
	Sb16_03_TemperatureAlarm                 AlarmBit16 = 0b0000_0000_0000_1000 // Bit3：温度告警 1:温度告警， 0:保留
	Sb16_02_DisplacementAlarm                AlarmBit16 = 0b0000_0000_0000_0100 // Bit2：位移告警 1：位移告警，0:保留
	Sb16_01_BatteryDisconnectedAlarm         AlarmBit16 = 0b0000_0000_0000_0010 // Bit1：外部电池移除 1：外部电池移除，0:保留
	Sb16_00_VibrateAlarm                     AlarmBit16 = 0b0000_0000_0000_0001 // Bit0: 震动告警 1：震动告警，0:保留
)
